<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //构造型函数：其实就是一个普通的函数
      //我们人为的将其当成一个可以创建出新的对象出来的函数用，
      //特点：首字母大写

      function Person() {}
      let p1 = new Person()
      //人为禁止像下面这样直接调用
      //Person()

      //添加属性和方法
      //可以给p1这个对象动态添加成员
      p1.namespace = 'abc'
      let p2 = new Person()
      //输出underfind,p2没有name属性
      console.log(p2.name)

      function Student() {
        this.name = '真希'
        this.work = function () {
          console.log('我在上课')
        }
      }

      let s1 = new Student()
      s1.age = 18
      console.log(s1.name)
      /*
      构造型函数创建对象的逻辑过程
      1、new Xxx
      2、构造函数内部直接创建一个空的对象
      可以将其理解为对象字面量o={}
      3、接着把这个对象o===this
      4、利用js的动态特性给this这个对象添加新的成员，比如name
      5、返回this
      */

      let s2 = new Student()
      console.log(s2.name)

      //函数本身是一个对象
      Student.xxx = 10000
    </script>
  </body>
</html>
